/* MediaUtil LLJTran - $RCSfile: MediaInfo.java,v $
 * Copyright (C) 1999-2005 Dmitriy Rogatkin, Suresh Mahalingam.  All rights reserved.
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *  THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 *  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 *  ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
 *  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 *  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *	$Id: MediaInfo.java,v 1.3 2005/08/18 04:35:34 drogatkin Exp $
 *
 */
package com.symaster.common.mediautil.gen;

import java.io.Serializable;

public interface MediaInfo extends Serializable {
    // TODO: think about using int instead of string for name
    String ESS_CHARACHTER = "charachter";
    String ESS_TIMESTAMP = "timestamp";
    String ESS_QUALITY = "quality";
    String ESS_MAKE = "make";

    String ALBUM = "Album";
    String ARTIST = "Artist";
    String ARTISTWEBPAGE = "ArtistWebpage";
    String AUDIOFILEWEBPAGE = "AudioFileWebpage";
    String AUDIOSOURCEWEBPAGE = "AudioSourceWebpage";
    String BAND = "Band";
    String BITRATE = "Bitrate";
    String VBR = "VBR";
    String CDIDENTIFIER = "CDIdentifier";
    String COMMENTS = "Comments";
    String COMMERCIAL = "Commercial";
    String COMMERCIALINFORMATION = "CommercialInformation";
    String COMPOSER = "Composer";
    String CONDUCTOR = "Conductor";
    String CONTENTGROUP = "ContentGroup";
    String COPYRIGHTTEXT = "CopyrightText";

    String COPYRIGHT = "Copyright";
    String COPYRIGHTWEBPAGE = "CopyrightWebpage";
    String DATE = "Date";
    String EMPHASIS = "Emphasis";
    String ENCAPSULATEDOBJECT = "EncapsulatedObject";
    String ENCODEDBY = "EncodedBy";
    String ENCRYPTIONMETHODREGISTRATION = "EncryptionMethodRegistration";
    String EQUALISATION = "Equalisation";
    String EVENTTIMINGCODES = "EventTimingCodes";
    String FILEOWNER = "FileOwner";
    String FILESIZE = "FileSize";
    String FILETYPE = "FileType";
    String GENRE = "Genre";
    String BPM = "BPM"; // (beats per minute)
    String RELATIVEVOLUMENADJUSTMENT = "RelativeVolumenAdjustment";
    String GROUPIDENTIFICATIONREGISTRATION = "GroupIdentificationRegistration";
    String INITIALKEY = "InitialKey"; // Musical key in which sound starts.
    String INTERNETRADIOSTATIONNAME = "InternetRadioStationName";
    String INTERNETRADIOSTATIONOWNER = "InternetRadioStationOwner";
    String INTERNETRADIOSTATIONWEBPAGE = "InternetRadioStationWebpage";
    String ISRC = "ISRC"; // International Standard Recording Code
    String LANGUAGE = "Language";
    String LAYER = "Layer";
    String LENGTH = "Length";
    String LENGTHINTAG = "LengthInTag";
    String LOOKUPTABLE = "LookupTable";
    String LYRICIST = "Lyricist";
    String MEDIATYPE = "MediaType";
    String MODE = "Mode";
    String MPEGLEVEL = "MPEGLevel";
    String ORIGINAL = "Original";
    String ORIGINALARTIST = "OriginalArtist";
    String ORIGINALFILENAME = "OriginalFilename";
    String ORIGINALLYRICIST = "OriginalLyricist";
    String ORIGINALTITLE = "OriginalTitle";
    String ORIGINALYEAR = "OriginalYear";
    String OWNERSHIP = "Ownership";
    String PAYMENTWEBPAGE = "PaymentWebpage";
    String PICTURE = "Picture";
    String PLAYCOUNTER = "PlayCounter";
    String PARTOFSET = "PartOfSet";
    String PLAYLISTDELAY = "PlaylistDelay";
    String POPULARIMETER = "Popularimeter";
    String PRIVATEDATA = "PrivateData";
    String LASTMODIFIED = "LastModified";

    String PRIVATE = "Private";
    String PROTECTION = "Protection";
    String PUBLISHER = "Publisher";
    String PUBLISHERSWEBPAGE = "PublishersWebpage";
    String RECORDINGDATES = "RecordingDates";
    String REMIXER = "Remixer";
    String REVERB = "Reverb";
    String SAMPLERATE = "Samplerate";
    String SUBTITLE = "Subtitle";
    String TERMSOFUSE = "TermsOfUse";
    String TIME = "Time";
    String TITLE = "Title";
    String TRACK = "Track";
    String OFTRACKS = "OfTracks";
    String UNIQUEFILEIDENTIFIER = "UniqueFileIdentifier";
    String USERDEFINEDTEXT = "UserDefinedText";
    String YEAR = "Year";
    String RATING = POPULARIMETER;
    String LASTPLAY = "LastPlay";
    String COMPILATION = "Compilation";

    String RESOLUTIONX = "ResolutionX";
    String RESOLUTIONY = "ResolutionY";
    String MAKE = "Make";
    String MODEL = "Model";
    String DATETIMEORIGINAL = "DateTimeOriginal";
    String DATETIMEORIGINALSTRING = "DateTimeOriginalString";
    String FNUMBER = "FNumber";
    String APERTURE = FNUMBER;
    String SHUTTER = "Shutter";
    String FLASH = "Flash";
    String ORIENTATION = "Orientation";
    String QUALITY = "Quality";
    String FOCALLENGTH = "FocalLength";
    String METERING = "Metering";
    String EXPOPROGRAM = "ExpoProgram";
    String FORMAT = "Format";
    String THUMBNAIL = "ThumbnailIcon";
    int CLASS_AUDIO = 2;
    int CLASS_VIDEO = 4;
    int CLASS_IMAGE = 1;
    String[] PICTURE_ATTRIBUTES = {
            RESOLUTIONX, RESOLUTIONY, MAKE, MODEL, DATETIMEORIGINAL,
            DATETIMEORIGINALSTRING, APERTURE, SHUTTER, FLASH, QUALITY,
            FOCALLENGTH, METERING, EXPOPROGRAM, FORMAT};
    String[] MEDIA_ATTRIBUTES = {
            BITRATE, FILESIZE, LAYER, LENGTH, MODE, MPEGLEVEL, SAMPLERATE
    };
    String[] PLAY_ATTRIBUTES = {
            ALBUM, ARTIST, ARTISTWEBPAGE, AUDIOFILEWEBPAGE, AUDIOSOURCEWEBPAGE, BAND,
            CDIDENTIFIER, COMMENTS, COMMERCIAL, COMMERCIALINFORMATION,
            COMPOSER, CONDUCTOR, CONTENTGROUP, COPYRIGHTTEXT, COPYRIGHT, COPYRIGHTWEBPAGE,
            DATE, EMPHASIS, ENCAPSULATEDOBJECT, ENCODEDBY, ENCRYPTIONMETHODREGISTRATION,
            EQUALISATION, EVENTTIMINGCODES, FILEOWNER, FILETYPE, GENRE,
            GROUPIDENTIFICATIONREGISTRATION, INITIALKEY, INTERNETRADIOSTATIONNAME,
            INTERNETRADIOSTATIONOWNER, INTERNETRADIOSTATIONWEBPAGE, ISRC,
            LANGUAGE, LENGTHINTAG, LOOKUPTABLE, LYRICIST, RELATIVEVOLUMENADJUSTMENT,
            MEDIATYPE, ORIGINAL, ORIGINALARTIST, ORIGINALFILENAME,
            ORIGINALLYRICIST, ORIGINALTITLE, ORIGINALYEAR, OWNERSHIP, PAYMENTWEBPAGE,
            BPM, PARTOFSET, COMPILATION,
            PICTURE, PLAYCOUNTER, PLAYLISTDELAY, POPULARIMETER, PRIVATEDATA,

            PRIVATE, PROTECTION, PUBLISHER, PUBLISHERSWEBPAGE, RECORDINGDATES,
            REMIXER, REVERB, SUBTITLE, TERMSOFUSE, TIME, TITLE,
            TRACK, UNIQUEFILEIDENTIFIER, USERDEFINEDTEXT, YEAR};

    // Methods
    Object getAttribute(String name);

    int getIntAttribute(String name);

    float getFloatAttribute(String name);

    long getLongAttribute(String name);

    boolean getBoolAttribute(String name);

    // public abstract int getMediaClass();

    double getDoubleAttribute(String name);

    Object[] getFiveMajorAttributes();

    void setAttribute(String name, Object value);

}
